home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / AIncludes / SCSI.a < prev    next >
Text File  |  1996-05-01  |  61KB  |  1,365 lines

  1. ;
  2. ;    File:        SCSI.a
  3. ;
  4. ;    Contains:    SCSI Family Interfaces.
  5. ;
  6. ;    Version:    Technology:    System 8.0
  7. ;                Release:    Universal Interfaces 3.0d3 on Copland DR1
  8. ;
  9. ;    Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10. ;
  11. ;    Bugs?:        If you find a problem with this file, send the file and version
  12. ;                information (from above) and the problem description to:
  13. ;
  14. ;                    Internet:    apple.bugs@applelink.apple.com
  15. ;                    AppleLink:    APPLE.BUGS
  16. ;
  17. ;
  18.     IF &TYPE('__SCSI__') = 'UNDEFINED' THEN
  19. __SCSI__ SET 1
  20.  
  21.     IF &TYPE('__TYPES__') = 'UNDEFINED' THEN
  22.     include 'Types.a'
  23.     ENDIF
  24.     IF &TYPE('__MIXEDMODE__') = 'UNDEFINED' THEN
  25.     include 'MixedMode.a'
  26.     ENDIF
  27.     IF FOR_SYSTEM8_PREEMPTIVE THEN
  28.     IF &TYPE('__KERNEL__') = 'UNDEFINED' THEN
  29.     include 'Kernel.a'
  30.     ENDIF
  31.     IF &TYPE('__NAMEREGISTRY__') = 'UNDEFINED' THEN
  32.     include 'NameRegistry.a'
  33.     ENDIF
  34.     IF &TYPE('__IOITERATOR__') = 'UNDEFINED' THEN
  35.     include 'IOIterator.a'
  36.     ENDIF
  37.     ENDIF
  38.     IF FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE THEN
  39. ;  SCSI Manager errors 
  40.  
  41. scCommErr                        EQU        2                    ; communications error, operation timeout 
  42. scArbNBErr                        EQU        3                    ; arbitration timeout waiting for not BSY 
  43. scBadParmsErr                    EQU        4                    ; bad parameter or TIB opcode 
  44. scPhaseErr                        EQU        5                    ; SCSI bus not in correct phase for attempted operation 
  45. scCompareErr                    EQU        6                    ; data compare error 
  46. scMgrBusyErr                    EQU        7                    ; SCSI Manager busy  
  47. scSequenceErr                    EQU        8                    ; attempted operation is out of sequence 
  48. scBusTOErr                        EQU        9                    ; CPU bus timeout 
  49. scComplPhaseErr                    EQU        10                    ; SCSI bus wasn't in Status phase 
  50.     ENDIF
  51.     IF FOR_SYSTEM7_ONLY THEN
  52. ;  TIB opcodes 
  53.  
  54. scInc                            EQU        1
  55. scNoInc                            EQU        2
  56. scAdd                            EQU        3
  57. scMove                            EQU        4
  58. scLoop                            EQU        5
  59. scNop                            EQU        6
  60. scStop                            EQU        7
  61. scComp                            EQU        8
  62. ;  Signatures 
  63.  
  64. sbSIGWord                        EQU        $4552                ; signature word for Block 0 ('ER') 
  65. sbMac                            EQU        1                    ; system type for Mac 
  66. pMapSIG                            EQU        $504D                ; partition map signature ('PM') 
  67. pdSigWord                        EQU        $5453
  68.  
  69. oldPMSigWord                    EQU        $5453
  70. newPMSigWord                    EQU        $504D
  71. ;  Driver Descriptor Map 
  72. Block0                    RECORD 0
  73. sbSig                     ds.w    1                ; offset: $0 (0)        ;  unique value for SCSI block 0 
  74. sbBlkSize                 ds.w    1                ; offset: $2 (2)        ;  block size of device 
  75. sbBlkCount                 ds.l    1                ; offset: $4 (4)        ;  number of blocks on device 
  76. sbDevType                 ds.w    1                ; offset: $8 (8)        ;  device type 
  77. sbDevId                     ds.w    1                ; offset: $A (10)        ;  device id 
  78. sbData                     ds.l    1                ; offset: $C (12)        ;  not used 
  79. sbDrvrCount                 ds.w    1                ; offset: $10 (16)        ;  driver descriptor count 
  80. ddBlock                     ds.l    1                ; offset: $12 (18)        ;  1st driver's starting block 
  81. ddSize                     ds.w    1                ; offset: $16 (22)        ;  size of 1st driver (512-byte blks) 
  82. ddType                     ds.w    1                ; offset: $18 (24)        ;  system type (1 for Mac+) 
  83. ddPad                     ds.w    243                ; offset: $1A (26)        ;  ARRAY[0..242] OF INTEGER; not used 
  84. sizeof                     EQU *                    ; size:   $200 (512)
  85.                         ENDR
  86. ; Driver descriptor
  87. DDMap                    RECORD 0
  88. ddBlock                     ds.l    1                ; offset: $0 (0)        ;  1st driver's starting block 
  89. ddSize                     ds.w    1                ; offset: $4 (4)        ;  size of 1st driver (512-byte blks) 
  90. ddType                     ds.w    1                ; offset: $6 (6)        ;  system type (1 for Mac+) 
  91. sizeof                     EQU *                    ; size:   $8 (8)
  92.                         ENDR
  93. ;  Partition Map Entry 
  94. Partition                RECORD 0
  95. pmSig                     ds.w    1                ; offset: $0 (0)        ;  unique value for map entry blk 
  96. pmSigPad                 ds.w    1                ; offset: $2 (2)        ;  currently unused 
  97. pmMapBlkCnt                 ds.l    1                ; offset: $4 (4)        ;  # of blks in partition map 
  98. pmPyPartStart             ds.l    1                ; offset: $8 (8)        ;  physical start blk of partition 
  99. pmPartBlkCnt             ds.l    1                ; offset: $C (12)        ;  # of blks in this partition 
  100. pmPartName                 ds.b    32                ; offset: $10 (16)        ;  ASCII partition name 
  101. pmParType                 ds.b    32                ; offset: $30 (48)        ;  ASCII partition type 
  102. pmLgDataStart             ds.l    1                ; offset: $50 (80)        ;  log. # of partition's 1st data blk 
  103. pmDataCnt                 ds.l    1                ; offset: $54 (84)        ;  # of blks in partition's data area 
  104. pmPartStatus             ds.l    1                ; offset: $58 (88)        ;  bit field for partition status 
  105. pmLgBootStart             ds.l    1                ; offset: $5C (92)        ;  log. blk of partition's boot code 
  106. pmBootSize                 ds.l    1                ; offset: $60 (96)        ;  number of bytes in boot code 
  107. pmBootAddr                 ds.l    1                ; offset: $64 (100)        ;  memory load address of boot code 
  108. pmBootAddr2                 ds.l    1                ; offset: $68 (104)        ;  currently unused 
  109. pmBootEntry                 ds.l    1                ; offset: $6C (108)        ;  entry point of boot code 
  110. pmBootEntry2             ds.l    1                ; offset: $70 (112)        ;  currently unused 
  111. pmBootCksum                 ds.l    1                ; offset: $74 (116)        ;  checksum of boot code 
  112. pmProcessor                 ds.b    16                ; offset: $78 (120)        ;  ASCII for the processor type 
  113. pmPad                     ds.w    188                ; offset: $88 (136)        ;  ARRAY[0..187] OF INTEGER; not used 
  114. sizeof                     EQU *                    ; size:   $200 (512)
  115.                         ENDR
  116. ;  TIB instruction 
  117. SCSIInstr                RECORD 0
  118. scOpcode                 ds.w    1                ; offset: $0 (0)
  119. scParam1                 ds.l    1                ; offset: $2 (2)
  120. scParam2                 ds.l    1                ; offset: $6 (6)
  121. sizeof                     EQU *                    ; size:   $A (10)
  122.                         ENDR
  123. ;  SCSI Phases (used by SIMs to support the Original SCSI Manager 
  124.  
  125. kDataOutPhase                    EQU        0                    ; Encoded MSG, C/D, I/O bits 
  126. kDataInPhase                    EQU        1
  127. kCommandPhase                    EQU        2
  128. kStatusPhase                    EQU        3
  129. kPhaseIllegal0                    EQU        4
  130. kPhaseIllegal1                    EQU        5
  131. kMessageOutPhase                EQU        6
  132. kMessageInPhase                    EQU        7
  133. kBusFreePhase                    EQU        8                    ; Additional Phases 
  134. kArbitratePhase                    EQU        9
  135. kSelectPhase                    EQU        10
  136. kMessageInPhaseNACK                EQU        11                    ; Message In Phase with ACK hanging on the bus 
  137. ;
  138. ; pascal OSErr SCSIReset(void )
  139. ;
  140.     IF ¨ GENERATINGCFM THEN
  141.         Macro
  142.         _SCSIReset
  143.             clr.w               -(sp)
  144.             dc.w                $A815
  145.         EndM
  146.     ELSE
  147.         IMPORT_CFM_FUNCTION SCSIReset
  148.     ENDIF
  149.  
  150. ;
  151. ; pascal OSErr SCSIGet(void )
  152. ;
  153.     IF ¨ GENERATINGCFM THEN
  154.         Macro
  155.         _SCSIGet
  156.             move.w              #$0001,-(sp)
  157.             dc.w                $A815
  158.         EndM
  159.     ELSE
  160.         IMPORT_CFM_FUNCTION SCSIGet
  161.     ENDIF
  162.  
  163. ;
  164. ; pascal OSErr SCSISelect(short targetID)
  165. ;
  166.     IF ¨ GENERATINGCFM THEN
  167.         Macro
  168.         _SCSISelect
  169.             move.w              #$0002,-(sp)
  170.             dc.w                $A815
  171.         EndM
  172.     ELSE
  173.         IMPORT_CFM_FUNCTION SCSISelect
  174.     ENDIF
  175.  
  176. ;
  177. ; pascal OSErr SCSICmd(Ptr buffer, short count)
  178. ;
  179.     IF ¨ GENERATINGCFM THEN
  180.         Macro
  181.         _SCSICmd
  182.             move.w              #$0003,-(sp)
  183.             dc.w                $A815
  184.         EndM
  185.     ELSE
  186.         IMPORT_CFM_FUNCTION SCSICmd
  187.     ENDIF
  188.  
  189. ;
  190. ; pascal OSErr SCSIRead(Ptr tibPtr)
  191. ;
  192.     IF ¨ GENERATINGCFM THEN
  193.         Macro
  194.         _SCSIRead
  195.             move.w              #$0005,-(sp)
  196.             dc.w                $A815
  197.         EndM
  198.     ELSE
  199.         IMPORT_CFM_FUNCTION SCSIRead
  200.     ENDIF
  201.  
  202. ;
  203. ; pascal OSErr SCSIRBlind(Ptr tibPtr)
  204. ;
  205.     IF ¨ GENERATINGCFM THEN
  206.         Macro
  207.         _SCSIRBlind
  208.             move.w              #$0008,-(sp)
  209.             dc.w                $A815
  210.         EndM
  211.     ELSE
  212.         IMPORT_CFM_FUNCTION SCSIRBlind
  213.     ENDIF
  214.  
  215. ;
  216. ; pascal OSErr SCSIWrite(Ptr tibPtr)
  217. ;
  218.     IF ¨ GENERATINGCFM THEN
  219.         Macro
  220.         _SCSIWrite
  221.             move.w              #$0006,-(sp)
  222.             dc.w                $A815
  223.         EndM
  224.     ELSE
  225.         IMPORT_CFM_FUNCTION SCSIWrite
  226.     ENDIF
  227.  
  228. ;
  229. ; pascal OSErr SCSIWBlind(Ptr tibPtr)
  230. ;
  231.     IF ¨ GENERATINGCFM THEN
  232.         Macro
  233.         _SCSIWBlind
  234.             move.w              #$0009,-(sp)
  235.             dc.w                $A815
  236.         EndM
  237.     ELSE
  238.         IMPORT_CFM_FUNCTION SCSIWBlind
  239.     ENDIF
  240.  
  241. ;
  242. ; pascal OSErr SCSIComplete(short *stat, short *message, unsigned long wait)
  243. ;
  244.     IF ¨ GENERATINGCFM THEN
  245.         Macro
  246.         _SCSIComplete
  247.             move.w              #$0004,-(sp)
  248.             dc.w                $A815
  249.         EndM
  250.     ELSE
  251.         IMPORT_CFM_FUNCTION SCSIComplete
  252.     ENDIF
  253.  
  254. ;
  255. ; pascal short SCSIStat(void )
  256. ;
  257.     IF ¨ GENERATINGCFM THEN
  258.         Macro
  259.         _SCSIStat
  260.             move.w              #$000A,-(sp)
  261.             dc.w                $A815
  262.         EndM
  263.     ELSE
  264.         IMPORT_CFM_FUNCTION SCSIStat
  265.     ENDIF
  266.  
  267. ;
  268. ; pascal OSErr SCSISelAtn(short targetID)
  269. ;
  270.     IF ¨ GENERATINGCFM THEN
  271.         Macro
  272.         _SCSISelAtn
  273.             move.w              #$000B,-(sp)
  274.             dc.w                $A815
  275.         EndM
  276.     ELSE
  277.         IMPORT_CFM_FUNCTION SCSISelAtn
  278.     ENDIF
  279.  
  280. ;
  281. ; pascal OSErr SCSIMsgIn(short *message)
  282. ;
  283.     IF ¨ GENERATINGCFM THEN
  284.         Macro
  285.         _SCSIMsgIn
  286.             move.w              #$000C,-(sp)
  287.             dc.w                $A815
  288.         EndM
  289.     ELSE
  290.         IMPORT_CFM_FUNCTION SCSIMsgIn
  291.     ENDIF
  292.  
  293. ;
  294. ; pascal OSErr SCSIMsgOut(short message)
  295. ;
  296.     IF ¨ GENERATINGCFM THEN
  297.         Macro
  298.         _SCSIMsgOut
  299.             move.w              #$000D,-(sp)
  300.             dc.w                $A815
  301.         EndM
  302.     ELSE
  303.         IMPORT_CFM_FUNCTION SCSIMsgOut
  304.     ENDIF
  305.  
  306.  
  307. scsiVERSION                        EQU        43
  308.     ENDIF
  309.     IF FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE THEN
  310. ;  SCSI Callback Procedure Prototypes 
  311. ;  SCSIInterruptPollProcPtr is obsolete (use SCSIInterruptProcPtr) but still here for compatibility 
  312.     ENDIF
  313.     IF FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE THEN
  314.     ENDIF
  315.     IF FOR_SYSTEM7_ONLY THEN
  316.     ENDIF
  317.     IF FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE THEN
  318. ;  SCSI Manager function codes 
  319.  
  320. SCSINop                            EQU        $00                    ; Execute nothing                                         
  321. SCSIExecIO                        EQU        $01                    ; Execute the specified IO                             
  322. SCSIBusInquiry                    EQU        $03                    ; Get parameters for entire path of HBAs                 
  323. SCSIReleaseQ                    EQU        $04                    ; Release the frozen SIM queue for particular LUN         
  324. SCSIAbortCommand                EQU        $10                    ; Abort the selected Control Block                      
  325. SCSIResetBus                    EQU        $11                    ; Reset the SCSI bus                                      
  326. SCSIResetDevice                    EQU        $12                    ; Reset the SCSI device                                  
  327. SCSITerminateIO                    EQU        $13                    ; Terminate any pending IO                              
  328. SCSIGetVirtualIDInfo            EQU        $80                    ; Find out which bus old ID is on                         
  329. SCSILoadDriver                    EQU        $82                    ; Load a driver for a device ident                     
  330. SCSIOldCall                        EQU        $84                    ; XPT->SIM private call for old-API                     
  331. SCSICreateRefNumXref            EQU        $85                    ; Register a DeviceIdent to drvr RefNum xref             
  332. SCSILookupRefNumXref            EQU        $86                    ; Get DeviceIdent to drvr RefNum xref                     
  333. SCSIRemoveRefNumXref            EQU        $87                    ; Remove a DeviceIdent to drvr RefNum xref             
  334. SCSIRegisterWithNewXPT            EQU        $88                    ; XPT has changed - SIM needs to re-register itself     
  335. vendorUnique                    EQU        $C0                    ; 0xC0 thru 0xFF 
  336. ;  Define DeviceIdent structure 
  337. DeviceIdent                RECORD 0
  338. diReserved                 ds.b    1                ; offset: $0 (0)        ;  reserved                 
  339. bus                         ds.b    1                ; offset: $1 (1)        ;  SCSI - Bus Number        
  340. targetID                 ds.b    1                ; offset: $2 (2)        ;  SCSI - Target SCSI ID    
  341. LUN                         ds.b    1                ; offset: $3 (3)        ;  SCSI - LUN                  
  342. sizeof                     EQU *                    ; size:   $4 (4)
  343.                         ENDR
  344. ;
  345. ; #endif // FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  346. ; #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  347. ;
  348. ;  Allocation length defines for some of the fields 
  349.  
  350. handshakeDataLength                EQU        8                    ; Handshake data length 
  351. maxCDBLength                    EQU        16                    ; Space for the CDB bytes/pointer 
  352. vendorIDLength                    EQU        16                    ; ASCII string len for Vendor ID  
  353. ; typedef unsigned char *                SCSIDataPtr
  354.  
  355. ;  Command Descriptor Block structure 
  356. CDB                        RECORD 0
  357. cdbPtr                     ds.l    1                ; offset: $0 (0)        ;  pointer to the CDB, or 
  358.                          ORG 0
  359. cdbBytes                 ds.b    16                ; offset: $0 (0)        ;  the actual CDB to send 
  360. sizeof                     EQU *                    ; size:   $10 (16)
  361.                         ENDR
  362. ; typedef union CDB *                    CDBPtr
  363.  
  364. ;  Scatter/gather list element 
  365. SGRecord                RECORD 0
  366. SGAddr                     ds.l    1                ; offset: $0 (0)
  367. SGCount                     ds.l    1                ; offset: $4 (4)
  368. sizeof                     EQU *                    ; size:   $8 (8)
  369.                         ENDR
  370. ;
  371. ; #endif    // FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  372. ; #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  373. ;
  374. SCSIHdr                    RECORD 0
  375. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  376. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  377. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  378. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  379. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  380. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  381. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  382. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  383. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  384. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  385. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  386. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  387. sizeof                     EQU *                    ; size:   $24 (36)
  388.                         ENDR
  389. SCSI_PB                    RECORD 0
  390. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  391. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  392. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  393. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  394. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  395. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  396. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  397. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  398. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  399. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  400. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  401. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  402. sizeof                     EQU *                    ; size:   $24 (36)
  403.                         ENDR
  404. ;
  405. ; #endif    // FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  406. ;  This is temporary until we have connection protocol ready.
  407. ; #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  408. ;
  409. SCSI_IO                    RECORD 0
  410. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  411. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  412. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  413. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  414. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  415. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  416. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  417. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  418. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  419. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  420. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  421. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  422. scsiResultFlags             ds.w    1                ; offset: $24 (36)        ;  <- Flags which modify the scsiResult field        
  423. scsiReserved3pt5         ds.w    1                ; offset: $26 (38)        ;  -> Reserved                                        
  424. scsiDataPtr                 ds.l    1                ; offset: $28 (40)        ;  -> Pointer to the data buffer or the S/G list      
  425. scsiDataLength             ds.l    1                ; offset: $2C (44)        ;  -> Data transfer length                            
  426. scsiSensePtr             ds.l    1                ; offset: $30 (48)        ;  -> Ptr to autosense data buffer                  
  427. scsiSenseLength             ds.b    1                ; offset: $34 (52)        ;  -> size of the autosense buffer                     
  428. scsiCDBLength             ds.b    1                ; offset: $35 (53)        ;  -> Number of bytes for the CDB                      
  429. scsiSGListCount             ds.w    1                ; offset: $36 (54)        ;  -> num of scatter gather list entries              
  430. scsiReserved4             ds.l    1                ; offset: $38 (56)        ;  <-     reserved for output                            
  431. scsiSCSIstatus             ds.b    1                ; offset: $3C (60)        ;  <- Returned scsi device status                      
  432. scsiSenseResidual         ds.b    1                ; offset: $3D (61)        ;  <- Autosense residual length                      
  433. scsiReserved5             ds.w    1                ; offset: $3E (62)        ;  <-     reserved for output                             
  434. scsiDataResidual         ds.l    1                ; offset: $40 (64)        ;  <- Returned Transfer residual length              
  435. scsiCDB                     ds        CDB                ; offset: $44 (68)        ;  -> Actual CDB or pointer to CDB                  
  436. scsiTimeout                 ds.l    1                ; offset: $54 (84)        ;  -> Timeout value (Time Mgr format) (CAM timeout) 
  437. scsiReserved5pt5         ds.l    1                ; offset: $58 (88)        ;  -> Reserved                                        
  438. scsiReserved5pt6         ds.w    1                ; offset: $5C (92)        ;  -> Reserved                                        
  439. scsiIOFlags                 ds.w    1                ; offset: $5E (94)        ;  -> additional I/O flags                               
  440. scsiTagAction             ds.b    1                ; offset: $60 (96)        ;  -> What to do for tag queuing                       
  441. scsiReserved6             ds.b    1                ; offset: $61 (97)        ;  ->     reserved for input                             
  442. scsiReserved7             ds.w    1                ; offset: $62 (98)        ;  ->     reserved for input                             
  443. scsiSelectTimeout         ds.w    1                ; offset: $64 (100)        ;  -> Select timeout value                             
  444. scsiDataType             ds.b    1                ; offset: $66 (102)        ;  -> Data description type (i.e. buffer, TIB, S/G)    
  445. scsiTransferType         ds.b    1                ; offset: $67 (103)        ;  -> Transfer type (i.e. Blind vs Polled)             
  446. scsiReserved8             ds.l    1                ; offset: $68 (104)        ;  ->     reserved for input                             
  447. scsiReserved9             ds.l    1                ; offset: $6C (108)        ;  ->     reserved for input                             
  448. scsiHandshake             ds.w    8                ; offset: $70 (112)        ;  -> handshaking points (null term'd)    
  449. scsiReserved10             ds.l    1                ; offset: $80 (128)        ;  ->     reserved for input                             
  450. scsiReserved11             ds.l    1                ; offset: $84 (132)        ;  ->   reserved for input                            
  451. scsiCommandLink             ds.l    1                ; offset: $88 (136)        ;  -> Ptr to the next PB in linked cmd chain         
  452. scsiSIMpublics             ds.b    8                ; offset: $8C (140)        ;  ->     reserved for input to 3rd-party SIMs        
  453. scsiAppleReserved6         ds.b    8                ; offset: $94 (148)        ;  ->    reserved for input                              
  454. ;  XPT layer privates (for old-API emulation) 
  455. scsiCurrentPhase         ds.w    1                ; offset: $9C (156)        ;  <- phase upon completing old call                  
  456. scsiSelector             ds.w    1                ; offset: $9E (158)        ;  -> selector specified in old calls                  
  457. scsiOldCallResult         ds.w    1                ; offset: $A0 (160)        ;  <- result of old call                              
  458. scsiSCSImessage             ds.b    1                ; offset: $A2 (162)        ;  <- Returned scsi device message (for SCSIComplete)
  459. XPTprivateFlags             ds.b    1                ; offset: $A3 (163)        ;  <> various flags                                   
  460. XPTextras                 ds.b    12                ; offset: $A4 (164)        ;                                                     
  461. sizeof                     EQU *                    ; size:   $B0 (176)
  462.                         ENDR
  463. SCSIExecIOPB            RECORD 0
  464. f                         ds        SCSI_IO
  465. sizeof                     EQU *                    ; size:   $B0 (176)
  466.                         ENDR
  467.  
  468.  
  469. ;  Bus inquiry PB 
  470. SCSIBusInquiryPB        RECORD 0
  471. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  472. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  473. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  474. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  475. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  476. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  477. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  478. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  479. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  480. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  481. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  482. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  483. scsiEngineCount             ds.w    1                ; offset: $24 (36)        ;  <- Number of engines on HBA                         
  484. scsiMaxTransferType         ds.w    1                ; offset: $26 (38)        ;  <- Number of transfer types for this HBA            
  485. scsiDataTypes             ds.l    1                ; offset: $28 (40)        ;  <- which data types are supported by this SIM     
  486. scsiIOpbSize             ds.w    1                ; offset: $2C (44)        ;  <- Size of SCSI_IO PB for this SIM/HBA             
  487. scsiMaxIOpbSize             ds.w    1                ; offset: $2E (46)        ;  <- Size of max SCSI_IO PB for all SIM/HBAs         
  488. scsiFeatureFlags         ds.l    1                ; offset: $30 (48)        ;  <- Supported features flags field                 
  489. scsiVersionNumber         ds.b    1                ; offset: $34 (52)        ;  <- Version number for the SIM/HBA                 
  490. scsiHBAInquiry             ds.b    1                ; offset: $35 (53)        ;  <- Mimic of INQ byte 7 for the HBA                 
  491. scsiTargetModeFlags         ds.b    1                ; offset: $36 (54)        ;  <- Flags for target mode support                 
  492. scsiScanFlags             ds.b    1                ; offset: $37 (55)        ;  <- Scan related feature flags                     
  493. scsiSIMPrivatesPtr         ds.l    1                ; offset: $38 (56)        ;  <- Ptr to SIM private data area                     
  494. scsiSIMPrivatesSize         ds.l    1                ; offset: $3C (60)        ;  <- Size of SIM private data area                 
  495. scsiAsyncFlags             ds.l    1                ; offset: $40 (64)        ;  <- Event cap. for Async Callback                 
  496. scsiHiBusID                 ds.b    1                ; offset: $44 (68)        ;  <- Highest path ID in the subsystem              
  497. scsiInitiatorID             ds.b    1                ; offset: $45 (69)        ;  <- ID of the HBA on the SCSI bus                 
  498. scsiBIReserved0             ds.w    1                ; offset: $46 (70)        ;                                                     
  499. scsiBIReserved1             ds.l    1                ; offset: $48 (72)        ;  <-                                                  
  500. scsiFlagsSupported         ds.l    1                ; offset: $4C (76)        ;  <- which scsiFlags are supported                 
  501. scsiIOFlagsSupported     ds.w    1                ; offset: $50 (80)        ;  <- which scsiIOFlags are supported                 
  502. scsiWeirdStuff             ds.w    1                ; offset: $52 (82)        ;  <-                                                 
  503. scsiMaxTarget             ds.w    1                ; offset: $54 (84)        ;  <- maximum Target number supported                 
  504. scsiMaxLUN                 ds.w    1                ; offset: $56 (86)        ;  <- maximum Logical Unit number supported         
  505. scsiSIMVendor             ds.b    16                ; offset: $58 (88)        ;  <- Vendor ID of SIM (or XPT if bus<FF)         
  506. scsiHBAVendor             ds.b    16                ; offset: $68 (104)        ;  <- Vendor ID of the HBA                         
  507. scsiControllerFamily     ds.b    16                ; offset: $78 (120)        ;  <- Family of SCSI Controller                 
  508. scsiControllerType         ds.b    16                ; offset: $88 (136)        ;  <- Specific Model of SCSI Controller used     
  509. scsiXPTversion             ds.b    4                ; offset: $98 (152)        ;  <- version number of XPT                         
  510. scsiSIMversion             ds.b    4                ; offset: $9C (156)        ;  <- version number of SIM                         
  511. scsiHBAversion             ds.b    4                ; offset: $A0 (160)        ;  <- version number of HBA                         
  512. scsiHBAslotType             ds.b    1                ; offset: $A4 (164)        ;  <- type of "slot" that this HBA is in            
  513. scsiHBAslotNumber         ds.b    1                ; offset: $A5 (165)        ;  <- slot number of this HBA                         
  514. scsiSIMsRsrcID             ds.w    1                ; offset: $A6 (166)        ;  <- resource ID of this SIM                         
  515. scsiBIReserved3             ds.w    1                ; offset: $A8 (168)        ;  <-                                                 
  516. scsiAdditionalLength     ds.w    1                ; offset: $AA (170)        ;  <- additional BusInquiry PB len                    
  517. sizeof                     EQU *                    ; size:   $AC (172)
  518.                         ENDR
  519. ;  Abort SIM Request PB 
  520. SCSIAbortCommandPB        RECORD 0
  521. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  522. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  523. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  524. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  525. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  526. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  527. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  528. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  529. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  530. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  531. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  532. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  533. scsiIOptr                 ds.l    1                ; offset: $24 (36)        ;  Pointer to the PB to abort            
  534. sizeof                     EQU *                    ; size:   $28 (40)
  535.                         ENDR
  536. ;  Terminate I/O Process Request PB 
  537. SCSITerminateIOPB        RECORD 0
  538. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  539. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  540. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  541. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  542. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  543. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  544. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  545. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  546. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  547. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  548. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  549. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  550. scsiIOptr                 ds.l    1                ; offset: $24 (36)        ;  Pointer to the PB to terminate         
  551. sizeof                     EQU *                    ; size:   $28 (40)
  552.                         ENDR
  553. ;  Reset SCSI Bus PB 
  554. SCSIResetBusPB            RECORD 0
  555. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  556. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  557. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  558. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  559. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  560. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  561. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  562. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  563. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  564. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  565. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  566. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  567. sizeof                     EQU *                    ; size:   $24 (36)
  568.                         ENDR
  569. ;  Reset SCSI Device PB 
  570. SCSIResetDevicePB        RECORD 0
  571. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  572. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  573. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  574. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  575. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  576. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  577. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  578. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  579. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  580. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  581. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  582. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  583. sizeof                     EQU *                    ; size:   $24 (36)
  584.                         ENDR
  585. ;  Release SIM Queue PB 
  586. SCSIReleaseQPB            RECORD 0
  587. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  588. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  589. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  590. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  591. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  592. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  593. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  594. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  595. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  596. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  597. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  598. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  599. sizeof                     EQU *                    ; size:   $24 (36)
  600.                         ENDR
  601.     ENDIF
  602.     IF FOR_SYSTEM7_ONLY THEN
  603. ;  SCSI Get Virtual ID Info PB 
  604. SCSIGetVirtualIDInfoPB    RECORD 0
  605. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  606. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  607. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  608. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  609. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  610. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  611. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  612. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  613. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  614. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  615. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  616. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  617. scsiOldCallID             ds.w    1                ; offset: $24 (36)        ;  -> SCSI ID of device in question     
  618. scsiExists                 ds.b    1                ; offset: $26 (38)        ;  <- true if device exists             
  619. filler                     ds.b    1                ; offset: $27 (39)
  620. sizeof                     EQU *                    ; size:   $28 (40)
  621.                         ENDR
  622. ;  Create/Lookup/Remove RefNum for Device PB 
  623. SCSIDriverPB            RECORD 0
  624. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  625. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  626. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  627. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  628. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  629. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  630. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  631. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  632. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  633. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  634. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  635. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  636. scsiDriver                 ds.w    1                ; offset: $24 (36)        ;  -> DriverRefNum, For SetDriver, <- For GetNextDriver 
  637. scsiDriverFlags             ds.w    1                ; offset: $26 (38)        ;  <> Details of driver/device             
  638. scsiNextDevice             ds        DeviceIdent        ; offset: $28 (40)        ;  <- DeviceIdent of the NEXT Item in the list  
  639. sizeof                     EQU *                    ; size:   $2C (44)
  640.                         ENDR
  641. ;  Load Driver PB 
  642. SCSILoadDriverPB        RECORD 0
  643. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  644. scsiReserved1             ds.w    1                ; offset: $4 (4)        ;  ->     reserved for input                
  645. scsiPBLength             ds.w    1                ; offset: $6 (6)        ;  -> Length of the entire PB            
  646. scsiFunctionCode         ds.b    1                ; offset: $8 (8)        ;  -> function selector                 
  647. scsiReserved2             ds.b    1                ; offset: $9 (9)        ;  <-     reserved for output                
  648. scsiResult                 ds.w    1                ; offset: $A (10)        ;  <- Returned result                     
  649. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)        ;  -> Device Identifier (bus+target+lun)
  650. scsiCompletion             ds.l    1                ; offset: $10 (16)        ;  -> Callback on completion function      
  651. scsiFlags                 ds.l    1                ; offset: $14 (20)        ;  -> assorted flags                    
  652. scsiDriverStorage         ds.l    1                ; offset: $18 (24)        ;  <> Ptr for driver private use        
  653. scsiXPTprivate             ds.l    1                ; offset: $1C (28)        ;  private field for use in XPT            
  654. scsiReserved3             ds.l    1                ; offset: $20 (32)        ;  reserved                                
  655. scsiLoadedRefNum         ds.w    1                ; offset: $24 (36)        ;  <- SIM returns refnum of driver         
  656. scsiDiskLoadFailed         ds.b    1                ; offset: $26 (38)        ;  -> if true, indicates call after failure to load 
  657. filler                     ds.b    1                ; offset: $27 (39)
  658. sizeof                     EQU *                    ; size:   $28 (40)
  659.                         ENDR
  660.     ENDIF
  661.     IF FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE THEN
  662. ;  Defines for the scsiTransferType field 
  663.  
  664. scsiTransferBlind                EQU        0
  665. scsiTransferPolled                EQU        1
  666.  
  667. scsiErrorBase                    EQU        -7936
  668.  
  669. scsiRequestInProgress            EQU        1                    ; 1     = PB request is in progress             
  670.                                                             ; Execution failed  00-2F 
  671. scsiRequestAborted                EQU        -7934                ; -7934 = PB request aborted by the host         
  672. scsiUnableToAbort                EQU        -7933                ; -7933 = Unable to Abort PB request             
  673. scsiNonZeroStatus                EQU        -7932                ; -7932 = PB request completed with an err     
  674. scsiUnused05                    EQU        -7931                ; -7931 =                                      
  675. scsiUnused06                    EQU        -7930                ; -7930 =                                      
  676. scsiUnused07                    EQU        -7929                ; -7929 =                                      
  677. scsiUnused08                    EQU        -7928                ; -7928 =                                      
  678. scsiUnableToTerminate            EQU        -7927                ; -7927 = Unable to Terminate I/O PB req         
  679. scsiSelectTimeout                EQU        -7926                ; -7926 = Target selection timeout             
  680. scsiCommandTimeout                EQU        -7925                ; -7925 = Command timeout                      
  681. scsiIdentifyMessageRejected        EQU        -7924                ; -7924 =                                      
  682. scsiMessageRejectReceived        EQU        -7923                ; -7923 = Message reject received                 
  683. scsiSCSIBusReset                EQU        -7922                ; -7922 = SCSI bus reset sent/received         
  684. scsiParityError                    EQU        -7921                ; -7921 = Uncorrectable parity error occured     
  685. scsiAutosenseFailed                EQU        -7920                ; -7920 = Autosense: Request sense cmd fail     
  686. scsiUnused11                    EQU        -7919                ; -7919 =                                      
  687. scsiDataRunError                EQU        -7918                ; -7918 = Data overrun/underrun error          
  688. scsiUnexpectedBusFree            EQU        -7917                ; -7917 = Unexpected BUS free                     
  689. scsiSequenceFailed                EQU        -7916                ; -7916 = Target bus phase sequence failure     
  690. scsiWrongDirection                EQU        -7915                ; -7915 = Data phase was in wrong direction     
  691. scsiUnused16                    EQU        -7914                ; -7914 =                                      
  692. scsiBDRsent                        EQU        -7913                ; -7913 = A SCSI BDR msg was sent to target     
  693. scsiTerminated                    EQU        -7912                ; -7912 = PB request terminated by the host     
  694. scsiNoNexus                        EQU        -7911                ; -7911 = Nexus is not established             
  695. scsiCDBReceived                    EQU        -7910                ; -7910 = The SCSI CDB has been received         
  696.                                                             ; Couldn't begin execution  30-3F 
  697. scsiTooManyBuses                EQU        -7888                ; -7888 = Register failed because we're full    
  698. scsiBusy                        EQU        -7887                ; -7887 = SCSI subsystem is busy                 
  699. scsiProvideFail                    EQU        -7886                ; -7886 = Unable to provide requ. capability    
  700. scsiDeviceNotThere                EQU        -7885                ; -7885 = SCSI device not installed/there      
  701. scsiNoHBA                        EQU        -7884                ; -7884 = No HBA detected Error                 
  702. scsiDeviceConflict                EQU        -7883                ; -7883 = sorry, max 1 refNum per DeviceIdent     
  703. scsiNoSuchXref                    EQU        -7882                ; -7882 = no such RefNum xref                     
  704. scsiQLinkInvalid                EQU        -7881                ; -7881 = pre-linked PBs not supported            
  705.                                                             ;   (The QLink field was nonzero)                
  706.                                                             ; Parameter errors  40-7F 
  707. scsiPBLengthError                EQU        -7872                ; -7872 = (scsiPBLength is insuf'ct/invalid     
  708. scsiFunctionNotAvailable        EQU        -7871                ; -7871 = The requ. func is not available      
  709. scsiRequestInvalid                EQU        -7870                ; -7870 = PB request is invalid                 
  710. scsiBusInvalid                    EQU        -7869                ; -7869 = Bus ID supplied is invalid              
  711. scsiTIDInvalid                    EQU        -7868                ; -7868 = Target ID supplied is invalid         
  712. scsiLUNInvalid                    EQU        -7867                ; -7867 = LUN supplied is invalid              
  713. scsiIDInvalid                    EQU        -7866                ; -7866 = The initiator ID is invalid          
  714. scsiDataTypeInvalid                EQU        -7865                ; -7865 = scsiDataType requested not supported 
  715. scsiTransferTypeInvalid            EQU        -7864                ; -7864 = scsiTransferType field is too high     
  716. scsiCDBLengthInvalid            EQU        -7863                ; -7863 = scsiCDBLength field is too big         
  717. ;  New errors for SCSI Family         
  718.  
  719. kSCSITargetProbeInvalidState    EQU        -7862                ; -7862 = bus prober internal software error     
  720. scsiBadObjectID                    EQU        -7861                ; -7861 = bad object ID to send message        
  721. scsiBadDataLength                EQU        -7860                ; -7860 = a zero data length in PB             
  722. scsiPartialPrepared                EQU        -7859                ; -7859 = could not do full prepare mem for I/O
  723. scsiBadPBSize                    EQU        -7872                ; -7872 = Incorrect parameter block size       
  724. scsiInvalidMsgType                EQU        -7858                ; -7858 = Invalid message type          
  725. scsiInvalidRegID                EQU        -7857                ; -7857 = Invalid registry Entry ID      
  726. scsiBadConnID                    EQU        -7856                ; -7856 = Bad Connection ID              
  727. scsiBadIOTag                    EQU        -7855                ; -7855 = Bad IO Tag                    
  728. scsiIOInProgress                EQU        -7854                ; -7854 = Can't close conn, IO in prog    
  729. scsiTargetReserved                EQU        -7853                ; -7853 = Target already reserved        
  730. scsiTargetInUsed                EQU        -7852                ; -7852 = Target is in used can't resv    
  731. scsiNoReserveOnBus                EQU        -7851                ; -7851 = Can't reserved on bus        
  732. scsiBadConnType                    EQU        -7850                ; -7850 = Bad connection type            
  733.  
  734. scsiExecutionErrors                EQU        -7936
  735. scsiNotExecutedErrors            EQU        -7888
  736. scsiParameterErrors                EQU        -7872
  737. ;  Defines for the scsiResultFlags field 
  738.  
  739. scsiSIMQFrozen                    EQU        $0001                ; The SIM queue is frozen w/this err            
  740. scsiAutosenseValid                EQU        $0002                ; Autosense data valid for target              
  741. scsiBusNotFree                    EQU        $0004                ; At time of callback, SCSI bus is not free    
  742. ;  Defines for the bit numbers of the scsiFlags field in the PB header for the SCSIExecIO function 
  743.  
  744. kbSCSIDisableAutosense            EQU        29                    ; Disable auto sense feature                     
  745. kbSCSIFlagReservedA                EQU        28                    ;                                              
  746. kbSCSIFlagReserved0                EQU        27                    ;                                              
  747. kbSCSICDBLinked                    EQU        26                    ; The PB contains a linked CDB                    
  748. kbSCSIQEnable                    EQU        25                    ; Target queue actions are enabled                
  749. kbSCSICDBIsPointer                EQU        24                    ; The CDB field contains a pointer                
  750. kbSCSIFlagReserved1                EQU        23                    ;                                                 
  751. kbSCSIInitiateSyncData            EQU        22                    ; Attempt Sync data xfer and SDTR                
  752. kbSCSIDisableSyncData            EQU        21                    ; Disable sync, go to async                    
  753. kbSCSISIMQHead                    EQU        20                    ; Place PB at the head of SIM Q                
  754. kbSCSISIMQFreeze                EQU        19                    ; Return the SIM Q to frozen state                
  755. kbSCSISIMQNoFreeze                EQU        18                    ; Disallow SIM Q freezing                        
  756. kbSCSIDoDisconnect                EQU        17                    ; Definitely do disconnect                        
  757. kbSCSIDontDisconnect            EQU        16                    ; Definitely don't disconnect                    
  758. kbSCSIDataReadyForDMA            EQU        15                    ; Data buffer(s) are ready for DMA                
  759. kbSCSIFlagReserved3                EQU        14                    ;                                                 
  760. kbSCSIDataPhysical                EQU        13                    ; SG/Buffer data ptrs are physical                
  761. kbSCSISensePhysical                EQU        12                    ; Autosense buffer ptr is physical                
  762. kbSCSIFlagReserved5                EQU        11                    ;                                                 
  763. kbSCSIFlagReserved6                EQU        10                    ;                                                 
  764. kbSCSIFlagReserved7                EQU        9                    ;                                                 
  765. kbSCSIFlagReserved8                EQU        8                    ;                                                 
  766. kbSCSIDataBufferValid            EQU        7                    ; Data buffer valid                            
  767. kbSCSIStatusBufferValid            EQU        6                    ; Status buffer valid                             
  768. kbSCSIMessageBufferValid        EQU        5                    ; Message buffer valid                            
  769. kbSCSIFlagReserved9                EQU        4                    ;                                              
  770. ;  Defines for the bit masks of the scsiFlags field 
  771.  
  772. scsiDirectionMask                EQU        $C0000000            ; Data direction mask                        
  773. scsiDirectionNone                EQU        $C0000000            ; Data direction (11: no data)                
  774. scsiDirectionReserved            EQU        $00000000            ; Data direction (00: reserved)            
  775. scsiDirectionOut                EQU        $80000000            ; Data direction (10: DATA OUT)            
  776. scsiDirectionIn                    EQU        $40000000            ; Data direction (01: DATA IN)                
  777. scsiDisableAutosense            EQU        $20000000            ; Disable auto sense feature                
  778. scsiFlagReservedA                EQU        $10000000            ;                                             
  779. scsiFlagReserved0                EQU        $08000000            ;                                             
  780. scsiCDBLinked                    EQU        $04000000            ; The PB contains a linked CDB                
  781. scsiQEnable                        EQU        $02000000            ; Target queue actions are enabled            
  782. scsiCDBIsPointer                EQU        $01000000            ; The CDB field contains a pointer            
  783. scsiFlagReserved1                EQU        $00800000            ;                                             
  784. scsiInitiateSyncData            EQU        $00400000            ; Attempt Sync data xfer and SDTR            
  785. scsiDisableSyncData                EQU        $00200000            ; Disable sync, go to async                
  786. scsiSIMQHead                    EQU        $00100000            ; Place PB at the head of SIM Q            
  787. scsiSIMQFreeze                    EQU        $00080000            ; Return the SIM Q to frozen state            
  788. scsiSIMQNoFreeze                EQU        $00040000            ; Disallow SIM Q freezing                    
  789. scsiDoDisconnect                EQU        $00020000            ; Definitely do disconnect                    
  790. scsiDontDisconnect                EQU        $00010000            ; Definitely don't disconnect                
  791. scsiDataReadyForDMA                EQU        $00008000            ; Data buffer(s) are ready for DMA            
  792. scsiFlagReserved3                EQU        $00004000            ;  
  793. scsiDataPhysical                EQU        $00002000            ; SG/Buffer data ptrs are physical            
  794. scsiSensePhysical                EQU        $00001000            ; Autosense buffer ptr is physical            
  795. scsiFlagReserved5                EQU        $00000800            ;                                          
  796. scsiFlagReserved6                EQU        $00000400            ;                                             
  797. scsiFlagReserved7                EQU        $00000200            ;                                             
  798. scsiFlagReserved8                EQU        $00000100            ;                                             
  799. ;  bit masks for the scsiIOFlags field in SCSIExecIOPB 
  800.  
  801. scsiNoParityCheck                EQU        $0002                ; disable parity checking                             
  802. scsiDisableSelectWAtn            EQU        $0004                ; disable select w/Atn                              
  803. scsiSavePtrOnDisconnect            EQU        $0008                ; do SaveDataPointer upon Disconnect msg             
  804. scsiNoBucketIn                    EQU        $0010                ; don't bit bucket in during this I/O                 
  805. scsiNoBucketOut                    EQU        $0020                ; don't bit bucket out during this I/O             
  806. scsiDisableWide                    EQU        $0040                ; disable wide transfer negotiation                 
  807. scsiInitiateWide                EQU        $0080                ; initiate wide transfer negotiation                 
  808. scsiRenegotiateSense            EQU        $0100                ; renegotiate sync/wide before issuing autosense     
  809. scsiDisableDiscipline            EQU        $0200                ; disable parameter checking on SCSIExecIO calls    
  810. scsiIOFlagReserved0080            EQU        $0080                ;                                                  
  811. scsiIOFlagReserved8000            EQU        $8000                ;                                                     
  812. ;  Defines for the Bus Inquiry PB fields. 
  813. ;  scsiHBAInquiry field bits 
  814.  
  815. scsiBusMDP                        EQU        $80                    ; Supports Modify Data Pointer message                        
  816. scsiBusWide32                    EQU        $40                    ; Supports 32 bit wide SCSI                                
  817. scsiBusWide16                    EQU        $20                    ; Supports 16 bit wide SCSI                                
  818. scsiBusSDTR                        EQU        $10                    ; Supports Sync Data Transfer Req message                    
  819. scsiBusLinkedCDB                EQU        $08                    ; Supports linked CDBs                                        
  820. scsiBusTagQ                        EQU        $02                    ; Supports tag queue message                                
  821. scsiBusSoftReset                EQU        $01                    ; Supports soft reset                                        
  822. ;  Defines for the scsiDataType field 
  823.  
  824. scsiDataBuffer                    EQU        0                    ; single contiguous buffer supplied                  
  825. scsiDataTIB                        EQU        1                    ; TIB supplied (ptr in scsiDataPtr)                 
  826. scsiDataSG                        EQU        2                    ; scatter/gather list supplied                      
  827. scsiDataIOTable                    EQU        3                    ;#(7/11/95) Prepared by Block Storage              
  828. scsiDataMemList                    EQU        4                    ; (2/6/96) Memory list
  829. ;  scsiDataTypes field bits  
  830. ;     bits 0->15 Apple-defined, 16->30 3rd-party unique, 31 = reserved 
  831.  
  832. scsiBusDataTIB                    EQU        $02                    ; TIB supplied (ptr in scsiDataPtr)        
  833. scsiBusDataBuffer                EQU        $01                    ; single contiguous buffer supplied         
  834. scsiBusDataSG                    EQU        $04                    ; scatter/gather list supplied             
  835. scsiBusDataIOTable                EQU        $08                    ; (2/6/95) Prepare Memory for IO
  836. scsiBusDataMemList                EQU        $10                    ; (2/6/96) Memory list
  837. scsiBusDataReserved                EQU        $80000000            ;                                           
  838. ;  scsiScanFlags field bits 
  839.  
  840. scsiBusScansDevices                EQU        $80                    ; Bus scans for and maintains device list            
  841. scsiBusScansOnInit                EQU        $40                    ; Bus scans performed at power-up/reboot            
  842. scsiBusLoadsROMDrivers            EQU        $20                    ; may load ROM drivers to support targets             
  843. ;  scsiFeatureFlags field bits 
  844.  
  845. scsiBusInternalExternalMask        EQU        $000000C0            ; bus internal/external mask                    
  846. scsiBusInternalExternalUnknown    EQU        $00000000            ; not known whether bus is inside or outside     
  847. scsiBusInternalExternal            EQU        $000000C0            ; bus goes inside and outside the box             
  848. scsiBusInternal                    EQU        $00000080            ; bus goes inside the box                         
  849. scsiBusExternal                    EQU        $00000040            ; bus goes outside the box                     
  850. scsiBusCacheCoherentDMA            EQU        $00000020            ; DMA is cache coherent                         
  851. scsiBusOldCallCapable            EQU        $00000010            ; SIM is old call capable                         
  852. scsiBusDifferential                EQU        $00000004            ; Single Ended (0) or Differential (1)         
  853. scsiBusFastSCSI                    EQU        $00000002            ; HBA supports fast SCSI                         
  854. scsiBusDMAavailable                EQU        $00000001            ; DMA is available                             
  855. ;  scsiWeirdStuff field bits 
  856.  
  857. scsiOddDisconnectUnsafeRead1    EQU        $0001                ; Disconnects on odd byte boundries are unsafe with DMA and/or blind reads 
  858. scsiOddDisconnectUnsafeWrite1    EQU        $0002                ; Disconnects on odd byte boundries are unsafe with DMA and/or blind writes 
  859. scsiBusErrorsUnsafe                EQU        $0004                ; Non-handshaked delays or disconnects during blind transfers may cause a crash 
  860. scsiRequiresHandshake            EQU        $0008                ; Non-handshaked delays or disconnects during blind transfers may cause data corruption 
  861. scsiTargetDrivenSDTRSafe        EQU        $0010                ; Targets which initiate synchronous negotiations are supported 
  862. scsiOddCountForPhysicalUnsafe    EQU        $0020                ; If using physical addrs all counts must be even, and disconnects must be on even boundries 
  863. scsiAbortCmdFixed                EQU        $0040                ; Set if abort command is fixed to properly make callbacks 
  864. ;  scsiHBAslotType values 
  865.  
  866. scsiMotherboardBus                EQU        $01                    ; A built in Apple supplied bus                     
  867. scsiNuBus                        EQU        $02                    ; A SIM on a NuBus card                             
  868. scsiPDSBus                        EQU        $03                    ;    "  on a PDS card                                
  869. scsiPCIBus                        EQU        $04                    ;    "  on a PCI bus card                            
  870. scsiPCMCIABus                    EQU        $05                    ;    "  on a PCMCIA card                            
  871. scsiFireWireBridgeBus            EQU        $06                    ;    "  connected through a FireWire bridge        
  872.     ENDIF
  873.     IF FOR_SYSTEM7_ONLY THEN
  874. ;  Defines for the scsiDriverFlags field (in SCSIDriverPB) 
  875.  
  876. scsiDeviceSensitive                EQU        $0001                ; Only driver should access this device                
  877. scsiDeviceNoOldCallAccess        EQU        $0002                ; no old call access to this device                     
  878. ;  SCSI status
  879.  
  880. scsiStatGood                    EQU        $00                    ; Good Status
  881. scsiStatCheckCondition            EQU        $02                    ; Check Condition
  882. scsiStatConditionMet            EQU        $04                    ; Condition Met
  883. scsiStatBusy                    EQU        $08                    ; Busy
  884. scsiStatIntermediate            EQU        $10                    ; Intermediate
  885. scsiStatIntermedMet                EQU        $14                    ; Intermediate - Condition Met
  886. scsiStatResvConflict            EQU        $18                    ; Reservation conflict
  887. scsiStatTerminated                EQU        $20                    ; Command terminated
  888. scsiStatQFull                    EQU        $28                    ; Queue full
  889. ;  SCSI messages
  890.  
  891. kCmdCompleteMsg                    EQU        0
  892. kExtendedMsg                    EQU        1                    ; 0x01
  893. kSaveDataPointerMsg                EQU        2                    ; 0x02
  894. kRestorePointersMsg                EQU        3                    ; 0x03
  895. kDisconnectMsg                    EQU        4                    ; 0x04
  896. kInitiatorDetectedErrorMsg        EQU        5                    ; 0x05
  897. kAbortMsg                        EQU        6                    ; 0x06
  898. kMsgRejectMsg                    EQU        7                    ; 0x07
  899. kNoOperationMsg                    EQU        8                    ; 0x08
  900. kMsgParityErrorMsg                EQU        9                    ; 0x09
  901. kLinkedCmdCompleteMsg            EQU        10                    ; 0x0a
  902. kLinkedCmdCompleteWithFlagMsg    EQU        11                    ; 0x0b
  903. kBusDeviceResetMsg                EQU        12                    ; 0x0c
  904. kAbortTagMsg                    EQU        13                    ; 0x0d
  905. kClearQueueMsg                    EQU        14                    ; 0x0e
  906. kInitiateRecoveryMsg            EQU        15                    ; 0x0f
  907. kReleaseRecoveryMsg                EQU        16                    ; 0x10
  908. kTerminateIOProcessMsg            EQU        17                    ; 0x11
  909. kSimpleQueueTag                    EQU        $20                    ; 0x20
  910. kHeadOfQueueTagMsg                EQU        $21                    ; 0x21
  911. kOrderedQueueTagMsg                EQU        $22                    ; 0x22
  912. kIgnoreWideResidueMsg            EQU        $23                    ; 0x23
  913.     ENDIF
  914.     IF FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE THEN
  915. ;   SIMInitInfo PB 
  916. ;  directions are for SCSIRegisterBus call ( -> parm, <- result)             
  917. SIMInitInfo                RECORD 0
  918. SIMstaticPtr             ds.l    1                ; offset: $0 (0)        ;  <- alloc. ptr to the SIM's static vars                 
  919. staticSize                 ds.l    1                ; offset: $4 (4)        ;  -> num bytes SIM needs for static vars                 
  920. SIMInit                     ds.l    1                ; offset: $8 (8)        ;  -> pointer to the SIM init routine                     
  921. SIMAction                 ds.l    1                ; offset: $C (12)        ;  -> pointer to the SIM action routine                 
  922. SIM_ISR                     ds.l    1                ; offset: $10 (16)        ;        reserved                                             
  923. SIMInterruptPoll         ds.l    1                ; offset: $14 (20)        ;  -> pointer to the SIM interrupt poll routine            
  924. NewOldCall                 ds.l    1                ; offset: $18 (24)        ;  -> pointer to the SIM NewOldCall routine                
  925. ioPBSize                 ds.w    1                ; offset: $1C (28)        ;  -> size of SCSI_IO_PBs required for this SIM            
  926. oldCallCapable             ds.b    1                ; offset: $1E (30)        ;  -> true if this SIM can handle old-API calls            
  927. simInfoUnused1             ds.b    1                ; offset: $1F (31)        ;        reserved                                            
  928. simInternalUse             ds.l    1                ; offset: $20 (32)        ;  xx not affected or viewed by XPT                        
  929. XPT_ISR                     ds.l    1                ; offset: $24 (36)        ;     reserved                                            
  930. EnteringSIM                 ds.l    1                ; offset: $28 (40)        ;  <- ptr to the EnteringSIM routine                    
  931. ExitingSIM                 ds.l    1                ; offset: $2C (44)        ;  <- ptr to the ExitingSIM routine                        
  932. MakeCallback             ds.l    1                ; offset: $30 (48)        ;  <- the XPT layer's SCSIMakeCallback routine            
  933. busID                     ds.w    1                ; offset: $34 (52)        ;  <- bus number for the registered bus                    
  934. simSlotNumber             ds.b    1                ; offset: $36 (54)        ;  <- Magic cookie to place in scsiHBASlotNumber (PCI)    
  935. simSRsrcID                 ds.b    1                ; offset: $37 (55)        ;  <- Magic cookie to place in scsiSIMsRsrcID     (PCI)    
  936. simRegEntry                 ds.l    1                ; offset: $38 (56)        ;  -> The SIM's RegEntryIDPtr                     (PCI)    
  937. sizeof                     EQU *                    ; size:   $3C (60)
  938.                         ENDR
  939. ;  Glue between SCSI calls and SCSITrap format 
  940.  
  941. xptSCSIAction                    EQU        $0001
  942. xptSCSIRegisterBus                EQU        $0002
  943. xptSCSIDeregisterBus            EQU        $0003
  944. xptSCSIReregisterBus            EQU        $0004
  945. xptSCSIKillXPT                    EQU        $0005                ; kills Mini-XPT after transition 
  946. xptSCSIInitialize                EQU        $000A                ; Initialize the SCSI manager 
  947. ;  moveq #kSCSIx, D0;  _SCSIAtomic 
  948. ;
  949. ; pascal OSErr SCSIAction(SCSI_PB *parameterBlock)
  950. ;
  951.     IF ¨ GENERATINGCFM THEN
  952.         ; parameters:
  953.         ;    parameterBlock  => A0
  954.         ; returns:
  955.         ;    OSErr           <= D0
  956.         Macro
  957.         _SCSIAction
  958.             moveq               #1,D0
  959.             dc.w                $A089
  960.         EndM
  961.     ELSE
  962.         IMPORT_CFM_FUNCTION SCSIAction
  963.     ENDIF
  964.  
  965. ;
  966. ; pascal OSErr SCSIRegisterBus(SIMInitInfo *parameterBlock)
  967. ;
  968.     IF ¨ GENERATINGCFM THEN
  969.         ; parameters:
  970.         ;    parameterBlock  => A0
  971.         ; returns:
  972.         ;    OSErr           <= D0
  973.         Macro
  974.         _SCSIRegisterBus
  975.             moveq               #2,D0
  976.             dc.w                $A089
  977.         EndM
  978.     ELSE
  979.         IMPORT_CFM_FUNCTION SCSIRegisterBus
  980.     ENDIF
  981.  
  982. ;
  983. ; pascal OSErr SCSIDeregisterBus(SCSI_PB *parameterBlock)
  984. ;
  985.     IF ¨ GENERATINGCFM THEN
  986.         ; parameters:
  987.         ;    parameterBlock  => A0
  988.         ; returns:
  989.         ;    OSErr           <= D0
  990.         Macro
  991.         _SCSIDeregisterBus
  992.             moveq               #3,D0
  993.             dc.w                $A089
  994.         EndM
  995.     ELSE
  996.         IMPORT_CFM_FUNCTION SCSIDeregisterBus
  997.     ENDIF
  998.  
  999. ;
  1000. ; pascal OSErr SCSIReregisterBus(SIMInitInfo *parameterBlock)
  1001. ;
  1002.     IF ¨ GENERATINGCFM THEN
  1003.         ; parameters:
  1004.         ;    parameterBlock  => A0
  1005.         ; returns:
  1006.         ;    OSErr           <= D0
  1007.         Macro
  1008.         _SCSIReregisterBus
  1009.             moveq               #4,D0
  1010.             dc.w                $A089
  1011.         EndM
  1012.     ELSE
  1013.         IMPORT_CFM_FUNCTION SCSIReregisterBus
  1014.     ENDIF
  1015.  
  1016. ;
  1017. ; pascal OSErr SCSIKillXPT(SIMInitInfo *parameterBlock)
  1018. ;
  1019.     IF ¨ GENERATINGCFM THEN
  1020.         ; parameters:
  1021.         ;    parameterBlock  => A0
  1022.         ; returns:
  1023.         ;    OSErr           <= D0
  1024.         Macro
  1025.         _SCSIKillXPT
  1026.             moveq               #5,D0
  1027.             dc.w                $A089
  1028.         EndM
  1029.     ELSE
  1030.         IMPORT_CFM_FUNCTION SCSIKillXPT
  1031.     ENDIF
  1032.  
  1033. ;
  1034. ; extern OSStatus SCSIInitBFPI(void )
  1035. ;
  1036.     IF GENERATINGCFM THEN
  1037.         IMPORT_CFM_FUNCTION SCSIInitBFPI
  1038.     ENDIF
  1039.  
  1040.     ENDIF
  1041.     IF FOR_SYSTEM8_PREEMPTIVE THEN
  1042. ;
  1043. ;    File:        SCSIConn.h
  1044. ;
  1045. ;    Contains:    Connection Based parameter checking
  1046. ;
  1047. ;    Version:    0.1
  1048. ;
  1049. ;    Written by:    Darryl Chan
  1050. ;
  1051. ;    Copyright:    © 1995-1996 by Apple Computer, Inc., all rights reserved.
  1052. ;
  1053. ;    File Ownership:
  1054. ;
  1055. ;        DRI:                Darryl Chan
  1056. ;
  1057. ;        Other Contact:        Stanford Au
  1058. ;
  1059. ;        Technology:            IO Group
  1060. ;
  1061. ;    Writers:
  1062. ;
  1063. ;        (DC)    Darryl Chan
  1064. ;
  1065. ;    Change History (most recent first):
  1066. ;
  1067. ;         <4>     1/25/96    DC        Integrate to D11 - name registry changes
  1068. ;         <3>     1/18/96    DC        Split file to public and private interfaces and converting to
  1069. ;                                    MrC.
  1070. ;         <2>     1/15/96    DC        Add more commands
  1071. ;         <1>      1/3/96    DC        First checked in.
  1072. ;
  1073. ;
  1074. ; typedef UInt32                         ConnectionType
  1075.  
  1076. ; typedef ObjectID                         ConnectionID
  1077.  
  1078. ; typedef MessageID                     SCSIExecIOTag
  1079.  
  1080.  
  1081. kMaxAutoSenseByteCount            EQU        255                    ; max sense byte buffer size
  1082. ;         values for 'type's of connection (UInt16)
  1083.  
  1084. kReservedAccess                    EQU        $0100                ; Reserved Access 
  1085. kSharedAccess                    EQU        $0200                ; Shared Access
  1086. SCSIDataObject            RECORD 0
  1087. scsiDataPtr                 ds.l    1                ; offset: $0 (0)
  1088. scsiDataLength             ds.l    1                ; offset: $4 (4)
  1089. scsiDataType             ds.w    1                ; offset: $8 (8)
  1090. scsiSGListCount             ds.w    1                ; offset: $A (10)
  1091. sizeof                     EQU *                    ; size:   $C (12)
  1092.                         ENDR
  1093. SCSICDBObject            RECORD 0
  1094. scsiCDBLength             ds.w    1                ; offset: $0 (0)
  1095. scsiCDB                     ds        CDB                ; offset: $2 (2)
  1096. sizeof                     EQU *                    ; size:   $12 (18)
  1097.                         ENDR
  1098. SCSIFlagsObject            RECORD 0
  1099. scsiFlags                 ds.l    1                ; offset: $0 (0)
  1100. scsiIOFlags                 ds.w    1                ; offset: $4 (4)
  1101. scsiTransferType         ds.w    1                ; offset: $6 (6)
  1102. sizeof                     EQU *                    ; size:   $8 (8)
  1103.                         ENDR
  1104. SCSIExecIOResult        RECORD 0
  1105. scsiResult                 ds.l    1                ; offset: $0 (0)
  1106. scsiResultFlags             ds.w    1                ; offset: $4 (4)
  1107. scsiSenseLength             ds.w    1                ; offset: $6 (6)        ;  the actual sense length returned
  1108. scsiDataResidual         ds.l    1                ; offset: $8 (8)        ;  residual data length
  1109. ioTag                     ds.l    1                ; offset: $C (12)
  1110. scsiSense                 ds.b    255                ; offset: $10 (16)        ;  maximum sense buffer
  1111. scsiSCSIstatus             ds.b    1                ; offset: $10F (271)
  1112. sizeof                     EQU *                    ; size:   $110 (272)
  1113.                         ENDR
  1114. SCSIIOOptionsObject        RECORD 0
  1115. scsiFlags                 ds.l    1                ; offset: $0 (0)
  1116. scsiIOFlags                 ds.l    1                ; offset: $4 (4)
  1117. sizeof                     EQU *                    ; size:   $8 (8)
  1118.                         ENDR
  1119. SCSIHandshakeObject        RECORD 0
  1120. scsiHandshake             ds.w    8                ; offset: $0 (0)
  1121. sizeof                     EQU *                    ; size:   $10 (16)
  1122.                         ENDR
  1123. SCSIBusInfo                RECORD 0
  1124. scsiEngineCount             ds.w    1                ; offset: $0 (0)        ;  <- Number of engines on HBA                         
  1125. scsiMaxTransferType         ds.w    1                ; offset: $2 (2)        ;  <- Number of transfer types for this HBA            
  1126. scsiDataTypes             ds.l    1                ; offset: $4 (4)        ;  <- which data types are supported by this SIM     
  1127. scsiBIReserved4             ds.l    1                ; offset: $8 (8)        ;  <-                                                  
  1128. scsiFeatureFlags         ds.l    1                ; offset: $C (12)        ;  <- Supported features flags field                 
  1129. scsiVersionNumber         ds.b    1                ; offset: $10 (16)        ;  <- Version number for the SIM/HBA                 
  1130. scsiHBAInquiry             ds.b    1                ; offset: $11 (17)        ;  <- Mimic of INQ byte 7 for the HBA                 
  1131. scsiTargetModeFlags         ds.b    1                ; offset: $12 (18)        ;  <- Flags for target mode support                 
  1132. scsiScanFlags             ds.b    1                ; offset: $13 (19)        ;  <- Scan related feature flags                     
  1133. scsiSIMPrivatesPtr         ds.l    1                ; offset: $14 (20)        ;  <- Ptr to SIM private data area                     
  1134. scsiSIMPrivatesSize         ds.l    1                ; offset: $18 (24)        ;  <- Size of SIM private data area                 
  1135. scsiAsyncFlags             ds.l    1                ; offset: $1C (28)        ;  <- Event cap. for Async Callback                 
  1136. scsiHiBusID                 ds.b    1                ; offset: $20 (32)        ;  <- Highest path ID in the subsystem              
  1137. scsiInitiatorID             ds.b    1                ; offset: $21 (33)        ;  <- ID of the HBA on the SCSI bus                 
  1138. scsiBIReserved0             ds.w    1                ; offset: $22 (34)        ;                                                     
  1139. scsiBIReserved1             ds.l    1                ; offset: $24 (36)        ;  <-                                                  
  1140. scsiFlagsSupported         ds.l    1                ; offset: $28 (40)        ;  <- which scsiFlags are supported                 
  1141. scsiIOFlagsSupported     ds.w    1                ; offset: $2C (44)        ;  <- which scsiIOFlags are supported                 
  1142. scsiWeirdStuff             ds.w    1                ; offset: $2E (46)        ;  <-                                                 
  1143. scsiMaxTarget             ds.w    1                ; offset: $30 (48)        ;  <- maximum Target number supported                 
  1144. scsiMaxLUN                 ds.w    1                ; offset: $32 (50)        ;  <- maximum Logical Unit number supported         
  1145. scsiSIMVendor             ds.b    16                ; offset: $34 (52)        ;  <- Vendor ID of SIM (or XPT if bus<FF)         
  1146. scsiHBAVendor             ds.b    16                ; offset: $44 (68)        ;  <- Vendor ID of the HBA                         
  1147. scsiControllerFamily     ds.b    16                ; offset: $54 (84)        ;  <- Family of SCSI Controller                 
  1148. scsiControllerType         ds.b    16                ; offset: $64 (100)        ;  <- Specific Model of SCSI Controller used     
  1149. scsiXPTversion             ds.b    4                ; offset: $74 (116)        ;  <- version number of XPT                         
  1150. scsiSIMversion             ds.b    4                ; offset: $78 (120)        ;  <- version number of SIM                         
  1151. scsiHBAversion             ds.b    4                ; offset: $7C (124)        ;  <- version number of HBA                         
  1152. scsiHBAslotType             ds.b    1                ; offset: $80 (128)        ;  <- type of "slot" that this HBA is in            
  1153. scsiHBAslotNumber         ds.b    1                ; offset: $81 (129)        ;  <- slot number of this HBA                         
  1154. scsiSIMsRsrcID             ds.w    1                ; offset: $82 (130)        ;  <- resource ID of this SIM                         
  1155. scsiBIReserved3             ds.w    1                ; offset: $84 (132)        ;  <-                                                 
  1156. ;     UInt16        scsiAdditionalLength;    /* <- additional BusInquiry PB len                    */
  1157. sizeof                     EQU *                    ; size:   $86 (134)
  1158.                         ENDR
  1159.  
  1160. kSCSIDeviceTypeSize                EQU        9                    ; number of characters for device type
  1161. kSCSIAllBus                        EQU        $FF                    ; search all bus
  1162. DeviceType                RECORD 0
  1163. elements                 ds.b    9
  1164.                          ORG 10
  1165. sizeof                     EQU *                    ; size:   $A (10)
  1166.                         ENDR
  1167.  
  1168.  
  1169. ;  this replaces SCSIDevList
  1170. SCSIIOIteratorData        RECORD 0
  1171. deviceInfo                 ds        IOCommonInfo    ; offset: $0 (0)
  1172. deviceID                 ds        DeviceIdent        ; offset: $14 (20)
  1173. deviceType                 ds        DeviceType        ; offset: $18 (24)
  1174.                          ORG 34
  1175. sizeof                     EQU *                    ; size:   $22 (34)
  1176.                         ENDR
  1177.  
  1178. scsiVERSION                        EQU        80
  1179. ;
  1180. ;_____________________________________________________________________
  1181. ;        Client type used to identify the type of client we are dealing 
  1182. ;        with.
  1183. ;_____________________________________________________________________
  1184. ;
  1185. ; typedef UInt8                         ClientType
  1186.  
  1187. ;      for Client type
  1188.  
  1189. kUserClient                        EQU        $02
  1190. kPriviClient                    EQU        $01
  1191. kBlueUserClient                    EQU        $06
  1192. ;
  1193. ;    
  1194. ;    New command to get Registry Entry ID for the SCSI Plugin
  1195. ;
  1196.  
  1197. SCSIGetRegEntryID                EQU        $89                    ; Return a copy of the System Registry    
  1198. SCSIGetRegEntryIDPB        RECORD 0
  1199. qLink                     ds.l    1                ; offset: $0 (0)        ;  (internal use, must be nil on entry)    
  1200. scsiReserved1             ds.w    1                ; offset: $4 (4)
  1201. scsiPBLength             ds.w    1                ; offset: $6 (6)
  1202. scsiFunctionCode         ds.b    1                ; offset: $8 (8)
  1203. scsiReserved2             ds.b    1                ; offset: $9 (9)
  1204. scsiResult                 ds.w    1                ; offset: $A (10)
  1205. scsiDevice                 ds        DeviceIdent        ; offset: $C (12)
  1206. scsiCompletion             ds.l    1                ; offset: $10 (16)
  1207. scsiFlags                 ds.l    1                ; offset: $14 (20)
  1208. scsiDriverStorage         ds.l    1                ; offset: $18 (24)
  1209. scsiXPTprivate             ds.l    1                ; offset: $1C (28)
  1210. scsiReserved3             ds.l    1                ; offset: $20 (32)
  1211. scsiRegEntryID             ds        RegEntryRef        ; offset: $24 (36)        ;  A copy of the System Registry ID    
  1212. sizeof                     EQU *                    ; size:   $34 (52)
  1213.                         ENDR
  1214. ;   Functions declarations
  1215. ;
  1216. ; extern OSStatus SCSIOpenConnection(RegEntryRef *regID, ConnectionType connType, ConnectionID *connID)
  1217. ;
  1218.     IF GENERATINGCFM THEN
  1219.         IMPORT_CFM_FUNCTION SCSIOpenConnection
  1220.     ENDIF
  1221.  
  1222. ;
  1223. ; extern OSStatus SCSICloseConnection(ConnectionID connID)
  1224. ;
  1225.     IF GENERATINGCFM THEN
  1226.         IMPORT_CFM_FUNCTION SCSICloseConnection
  1227.     ENDIF
  1228.  
  1229. ;
  1230. ; extern OSStatus SCSIExecIOSyncCmd(ConnectionID connID, SCSIDataObject dataObject, SCSICDBObject cdbObject, SCSIFlagsObject flagsObject, SCSIExecIOResult *resultBuffer, SCSIExecIOTag *ioTag)
  1231. ;
  1232.     IF GENERATINGCFM THEN
  1233.         IMPORT_CFM_FUNCTION SCSIExecIOSyncCmd
  1234.     ENDIF
  1235.  
  1236. ;
  1237. ; extern OSStatus SCSIExecIOAsyncCmd(ConnectionID connID, KernelNotification *kernelNot, SCSIDataObject dataObject, SCSICDBObject cdbObject, SCSIFlagsObject flagsObject, SCSIExecIOResult *resultBuffer, SCSIExecIOTag *ioTag)
  1238. ;
  1239.     IF GENERATINGCFM THEN
  1240.         IMPORT_CFM_FUNCTION SCSIExecIOAsyncCmd
  1241.     ENDIF
  1242.  
  1243. ;
  1244. ; extern OSStatus SCSIAbortIOCmd(ConnectionID connID, SCSIExecIOTag ioTag)
  1245. ;
  1246.     IF GENERATINGCFM THEN
  1247.         IMPORT_CFM_FUNCTION SCSIAbortIOCmd
  1248.     ENDIF
  1249.  
  1250. ;
  1251. ; extern OSStatus SCSITerminateIOCmd(ConnectionID connID, SCSIExecIOTag ioTag)
  1252. ;
  1253.     IF GENERATINGCFM THEN
  1254.         IMPORT_CFM_FUNCTION SCSITerminateIOCmd
  1255.     ENDIF
  1256.  
  1257. ;
  1258. ; extern OSStatus SCSIReleaseQCmd(ConnectionID connID)
  1259. ;
  1260.     IF GENERATINGCFM THEN
  1261.         IMPORT_CFM_FUNCTION SCSIReleaseQCmd
  1262.     ENDIF
  1263.  
  1264. ;
  1265. ; extern OSStatus SCSIClearQueue(ConnectionID connID)
  1266. ;
  1267.     IF GENERATINGCFM THEN
  1268.         IMPORT_CFM_FUNCTION SCSIClearQueue
  1269.     ENDIF
  1270.  
  1271. ;
  1272. ; extern OSStatus SCSIBusResetSync(ConnectionID connID, OSStatus *resultBuffer)
  1273. ;
  1274.     IF GENERATINGCFM THEN
  1275.         IMPORT_CFM_FUNCTION SCSIBusResetSync
  1276.     ENDIF
  1277.  
  1278. ;
  1279. ; extern OSStatus SCSIBusResetAsync(ConnectionID connID, KernelNotification *kernelNot, OSStatus *resultBuffer)
  1280. ;
  1281.     IF GENERATINGCFM THEN
  1282.         IMPORT_CFM_FUNCTION SCSIBusResetAsync
  1283.     ENDIF
  1284.  
  1285. ;
  1286. ; extern OSStatus SCSIDeviceResetSync(ConnectionID connID, OSStatus *resultBuffer)
  1287. ;
  1288.     IF GENERATINGCFM THEN
  1289.         IMPORT_CFM_FUNCTION SCSIDeviceResetSync
  1290.     ENDIF
  1291.  
  1292. ;
  1293. ; extern OSStatus SCSIDeviceResetAsync(ConnectionID connID, KernelNotification *kernelNot, OSStatus *resultBuffer)
  1294. ;
  1295.     IF GENERATINGCFM THEN
  1296.         IMPORT_CFM_FUNCTION SCSIDeviceResetAsync
  1297.     ENDIF
  1298.  
  1299. ;
  1300. ; extern OSStatus SCSIBusGetDeviceData(UInt8 *bus, UInt32 reqCount, UInt32 *actCount, SCSIIOIteratorData *list)
  1301. ;
  1302.     IF GENERATINGCFM THEN
  1303.         IMPORT_CFM_FUNCTION SCSIBusGetDeviceData
  1304.     ENDIF
  1305.  
  1306. ;
  1307. ; extern OSStatus SCSIBusInquiryCmd(ConnectionID connID, SCSIBusInfo *resultBuffer)
  1308. ;
  1309.     IF GENERATINGCFM THEN
  1310.         IMPORT_CFM_FUNCTION SCSIBusInquiryCmd
  1311.     ENDIF
  1312.  
  1313. ;
  1314. ; extern OSStatus SCSISetHandshake(ConnectionID connID, SCSIHandshakeObject handshake)
  1315. ;
  1316.     IF GENERATINGCFM THEN
  1317.         IMPORT_CFM_FUNCTION SCSISetHandshake
  1318.     ENDIF
  1319.  
  1320. ;
  1321. ; extern OSStatus SCSISetTimeout(ConnectionID connID, Duration scsiTimeout, UInt16 scsiSelectTimeout)
  1322. ;
  1323.     IF GENERATINGCFM THEN
  1324.         IMPORT_CFM_FUNCTION SCSISetTimeout
  1325.     ENDIF
  1326.  
  1327. ;
  1328. ; extern OSStatus SCSISetIOOptions(ConnectionID connID, SCSIIOOptionsObject ioOptions)
  1329. ;
  1330.     IF GENERATINGCFM THEN
  1331.         IMPORT_CFM_FUNCTION SCSISetIOOptions
  1332.     ENDIF
  1333.  
  1334. ;
  1335. ; extern OSStatus SCSIInitFPI(void )
  1336. ;
  1337.     IF GENERATINGCFM THEN
  1338.         IMPORT_CFM_FUNCTION SCSIInitFPI
  1339.     ENDIF
  1340.  
  1341. ;
  1342. ; extern OSStatus SCSIServer(SCSI_PB *scsiPB, KernelNotification *kernelNot)
  1343. ;
  1344.     IF GENERATINGCFM THEN
  1345.         IMPORT_CFM_FUNCTION SCSIServer
  1346.     ENDIF
  1347.  
  1348. ;
  1349. ; extern OSStatus SCSIExecIOControlSyncCmd(ConnectionID connID, SCSIDataObject dataObject, DeviceIdent deviceID, SCSICDBObject cdbObject, SCSIFlagsObject flagsObject, SCSIExecIOResult *resultBuffer, SCSIExecIOTag *ioTag)
  1350. ;
  1351.     IF GENERATINGCFM THEN
  1352.         IMPORT_CFM_FUNCTION SCSIExecIOControlSyncCmd
  1353.     ENDIF
  1354.  
  1355. ;
  1356. ; extern OSStatus SCSIExecIOControlAsyncCmd(ConnectionID connID, KernelNotification *kernelNot, SCSIDataObject dataObject, DeviceIdent deviceID, SCSICDBObject cdbObject, SCSIFlagsObject flagsObject, SCSIExecIOResult *resultBuffer, SCSIExecIOTag *ioTag)
  1357. ;
  1358.     IF GENERATINGCFM THEN
  1359.         IMPORT_CFM_FUNCTION SCSIExecIOControlAsyncCmd
  1360.     ENDIF
  1361.  
  1362.     ENDIF
  1363.     ENDIF ; __SCSI__ 
  1364.  
  1365.